package com.netty.demo.server.service;

import com.alibaba.fastjson.JSON;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.netty.demo.server.dao.DemoDao;
import com.netty.demo.server.dto.UdpRequestMessage;
import com.netty.demo.server.model.Demo;
import com.netty.demo.server.netty.annotation.CommandAnnotation;
import com.netty.demo.server.netty.enums.Command;
import com.netty.demo.server.netty.processor.CommandProcessor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.util.List;

/**
 * 登录服务
 * TODO 该类为 demo 仅供参考 仅 演示如何使用 @CommandAnnotation 注解
 *
 * @author Administrator 余秀良
 * @version 1.0
 * <p>date: 2019年09月27日  09:17 </p>
 * <p>address: 四川成都 </p>
 */
@Slf4j
@Service
@CommandAnnotation(value = Command.COMMAND_LOGIN_REQ)
public class LoginService implements CommandProcessor {
    @Resource
    private DemoDao demoDao;


    private void selectUserToXml() {
        //这里需要把用户的信息查出来，
        // 把数据生成xml文件
        // 把xml文件打成zip压缩包并放到指定路径下
    }

    @Override
    public <T> void execute(T clazz) {
        //TODO 这里用UdpRequestMessage 接收，是因为我在协议处理器里面没有做任何的修改,直接传了过来,正式使用的时候应该把数据解析出来然后封装为实体类传过来
        UdpRequestMessage message = (UdpRequestMessage) clazz;
        //TODO 这里为 增上改查的示例代码，仅供参考
        Demo demo = new Demo();
        demo.setName("张三");
        demo.setExtras(message.getData());
        boolean isOk = demoDao.insert(demo) > 0;
        System.out.println(demo.getId());
        System.out.println(isOk ? "插入成功" : "插入失败");
        isOk = demoDao.delete(Wrappers.<Demo>lambdaQuery().eq(Demo::getName, "张三")) > 0;
        System.out.println(isOk ? "删除成功" : "删除失败");
        //把id为1的用户名字修改为李四
        Demo demo1 = new Demo();
        demo1.setName("李四");
        demo1.setId(1L);
        isOk = demoDao.updateById(demo1) > 0;
        System.out.println(isOk ? "修改成功" : "修改失败");
        LambdaQueryWrapper<Demo> eq = Wrappers.<Demo>lambdaQuery().eq(Demo::getId, 1);
        Demo one = demoDao.selectOne(eq);
        System.out.println("查询出来的数据是--->  " + JSON.toJSONString(one));
        one = demoDao.selectById(1);
        System.out.println("查询出来的数据是--->  " + JSON.toJSONString(one));
        List<Demo> list = demoDao.selectList(Wrappers.<Demo>lambdaQuery().like(Demo::getName, "张"));
        System.out.println("查询出来的数据是--> " + JSON.toJSONString(list));
        System.out.println(Thread.currentThread().getName());
        log.info("\n 请求头 {} \n 数据 {}", message.getHead(), message.getData());
    }

    @Override
    public Command command() {
        return Command.COMMAND_LOGIN_REQ;
    }

}
